package com.pattern.factory;

import com.pattern.factory.factory.Provider;
import com.pattern.factory.factory.SendFactory;
import com.pattern.factory.factory.SendMailFactory;
import com.pattern.factory.service.Sender;

public class FactoryTest {

    public static void main(String[] args) {
        //普通工厂模式
        SendFactory factory = new SendFactory();
        Sender sender = factory.produce("sms");
        sender.send();

        System.out.println();

        //多个工厂方法模式/静态工厂方法模式(将上面的多个工厂方法模式里的方法置为静态的，不需要创建实例，直接调用即可)
        sender = factory.produceMail();
        sender.send();
        /**
         * 工厂方法模式有一个问题就是，类的创建依赖工厂类，也就是说，如果想要拓展程序，必须对工厂类进行修改，这违背了闭包原则
         */

        System.out.println();

        //抽象工厂模式
        Provider provider = new SendMailFactory();
        sender = provider.produce();
        sender.send();
        /**
         * 抽象工厂模式
         * 其实这个模式的好处就是，如果你现在想增加一个功能：
         *  发及时信息，则只需做一个实现类，实现Sender接口，同时做一个工厂类，实现Provider接口，就OK了，
         *  无需去改动现成的代码。这样做，拓展性较好！
         */
    }
}

